20 research outputs found

    Class Hierarchy Complementation: Soundly Completing a Partial Type Graph

    Get PDF
    We present the problem of class hierarchy complementa- tion: given a partially known hierarchy of classes together with subtyping constraints (“A has to be a transitive sub- type of B”) complete the hierarchy so that it satisfies all con- straints. The problem has immediate practical application to the analysis of partial programs—e.g., it arises in the process of providing a sound handling of “phantom classes” in the Soot program analysis framework. We provide algorithms to solve the hierarchy complementation problem in the single inheritance and multiple inheritance settings. We also show that the problem in a language such as Java, with single in- heritance but multiple subtyping and distinguished class vs. interface types, can be decomposed into separate single- and multiple-subtyping instances. We implement our algorithms in a tool, JPhantom, which complements partial Java byte- code programs so that the result is guaranteed to satisfy the Java verifier requirements. JPhantom is highly scalable and runs in mere seconds even for large input applications and complex constraints (with a maximum of 14s for a 19MB binary)

    Set-Based Pre-Processing for Points-To Analysis

    Get PDF
    We present set-based pre-analysis: a virtually universal op- timization technique for flow-insensitive points-to analysis. Points-to analysis computes a static abstraction of how ob- ject values flow through a program’s variables. Set-based pre-analysis relies on the observation that much of this rea- soning can take place at the set level rather than the value level. Computing constraints at the set level results in sig- nificant optimization opportunities: we can rewrite the in- put program into a simplified form with the same essential points-to properties. This rewrite results in removing both local variables and instructions, thus simplifying the sub- sequent value-based points-to computation. E ectively, set- based pre-analysis puts the program in a normal form opti- mized for points-to analysis. Compared to other techniques for o -line optimization of points-to analyses in the literature, the new elements of our approach are the ability to eliminate statements, and not just variables, as well as its modularity: set-based pre-analysis can be performed on the input just once, e.g., allowing the pre-optimization of libraries that are subsequently reused many times and for di erent analyses. In experiments with Java programs, set-based pre-analysis eliminates 30% of the program’s local variables and 30% or more of computed context-sensitive points-to facts, over a wide set of bench- marks and analyses, resulting in a 20% average speedup (max: 110%, median: 18%)

    Recovering Structural Information for Better Static Analysis

    Get PDF
    Η στατική ανάλυση στοχεύει στην κατανόηση της συμπεριφοράς του προγράμματος, μέσω αυτοματοποιημένων τεχνικών συμπερασμού που βασίζονται καθαρά στον πηγαίο κώδικα του προγράμματος, αλλά δεν προϋποθέτουν την εκτέλεσή του. Για να πετύχουν αυτές οι τεχνικές μία ευρεία κατανόηση του κώδικα, καταφεύγουν στη δημιουργία ενός αφηρημένου μοντέλου της μνήμης, το οποίο καλύπτει όλες τις πιθανές εκτελέσεις. Αφηρημένα μοντέλα τέτοιου τύπου μπορεί γρήγορα να εκφυλιστούν, αν χάσουν σημαντική δομική πληροφορία των αντικειμένων στη μνήμη που περιγράφουν. Αυτό συνήθως συμβαίνει λόγω χρήσης συγκεκριμένων προγραμματιστικών ιδιωμάτων και χαρακτηριστικών της γλώσσας προγραμματισμού, ή λόγω πρακτικών περιορισμών της ανάλυσης. Σε αρκετές περιπτώσεις, ένα σημαντικό μέρος της χαμένης αυτής δομικής πληροφορίας μπορεί να ανακτηθεί μέσω σύνθετης λογικής, η οποία παρακολουθεί την έμμεση χρήση τύπων, και να χρησιμοποιηθεί προς όφελος της στατικής ανάλυσης του προγράμματος. Στη διατριβή αυτή παρουσιάζουμε διάφορους τρόπους ανάκτησης δομικής πληροφορίας, πρώτα (1) σε προγράμματα C/C++, κι έπειτα, σε προγράμματα γλωσσών υψηλότερου επιπέδου που δεν προσφέρουν άμεση πρόσβαση μνήμης, όπως η Java, όπου αναγνωρίζουμε δύο βασικές πηγές απώλειας δομικής πληροφορίας: (2) χρήση ανάκλασης και (3) ανάλυση μερικών προγραμμάτων. Δείχνουμε πως, σε όλες τις παραπάνω περιπτώσεις, η ανάκτηση τέτοιας δομικής πληροφορίας βελτιώνει άμεσα τη στατική ανάλυση του προγράμματος. Παρουσιάζουμε μία ανάλυση δεικτών για C/C++, η οποία βελτιώνει το επίπεδο της αφαίρεσης, βασιζόμενη σε πληροφορία τύπου που ανακαλύπτει κατά τη διάρκεια της ανάλυσης. Παρέχουμε μία υλοποίηση της ανάλυσης αυτής, στο cclyzer, ένα εργαλείο στατικής ανάλυσης για LLVM bitcode. Έπειτα, παρουσιάζουμε επεκτάσεις σε ανάλυση δεικτών για Java, κτίζοντας πάνω σε σύγχρονες τεχνικές χειρισμού μηχανισμών ανάκλασης. Η βασική αρχή είναι παραπλήσια με την περίπτωση της C/C++: καταγράφουμε τη χρήση των ανακλαστικών αντικειμένων, κατά τη διάρκεια της ανάλυσης δεικτών, ώστε να ανακαλύψουμε βασικά δομικά τους στοιχεία, τα οποία μπορούμε να χρησιμοποιήσουμε έπειτα για να βελτιώσουμε τον χειρισμό των εντολών ανάκλασης στην τρέχουσα ανάλυση, με αμοιβαία αναδρομικό τρόπο. Τέλος, ως προς την ανάλυση μερικών προγραμμάτων Java, ορίζουμε το γενικό πρόβλημα της ((συμπλήρωσης προγράμματος)): δοθέντος ενός μερικού προγράμματος, πως να εφεύρουμε ένα υποκατάστατο του κώδικα που λείπει, έτσι ώστε αυτό να ικανοποιεί τους περιορισμούς των στατικών και δυναμικών τύπων που υπονοούνται από τον υπάρχοντα κώδικα. Ή διαφορετικά, πως να ανακτήσουμε τη δομή των τύπων που λείπουν. Πέραν της ανακάλυψης των μελών (πεδίων και μεθόδων) των κλάσεων που λείπουν, η ικανοποίηση των περιορισμών υποτυπισμού μας οδηγεί στον ορισμό ενός πρωτότυπου αλγοριθμικού προβλήματος: τη συμπλήρωση ιεραρχίας τύπων. Παρέχουμε αλγορίθμους που λύνουν το πρόβλημα αυτό σε διάφορα είδη κληρονομικότητας (μονής, πολλαπλής, μεικτής) και τους υλοποιούμε στο JPhantom, ένα νέο εργαλείο συμπλήρωσης Java bytecode κώδικα.Static analysis aims to achieve an understanding of program behavior, by means of automatic reasoning that requires only the program’s source code and not any actual execution. To reach a truly broad level of program understanding, static analysis techniques need to create an abstraction of memory that covers all possible executions. Such abstract models may quickly degenerate after losing essential structural information about the memory objects they describe, due to the use of specific programming idioms and language features, or because of practical analysis limitations. In many cases, some of the lost memory structure may be retrieved, though it requires complex inference that takes advantage of indirect uses of types. Such recovered structural information may, then, greatly benefit static analysis. This dissertation shows how we can recover structural information, first (i) in the context of C/C++, and next, in the context of higher-level languages without direct memory access, like Java, where we identify two primary causes of losing memory structure: (ii) the use of reflection, and (iii) analysis of partial programs. We show that, in all cases, the recovered structural information greatly benefits static analysis on the program. For C/C++, we introduce a structure-sensitive pointer analysis that refines its abstraction based on type information that it discovers on-they-fly. This analysis is implemented in cclyzer, a static analysis tool for LLVM bitcode. Next, we present techniques that extend a standard Java pointer analysis by building on top of state-of-the-art handling of reflection. The principle is similar to that of our structure-sensitive analysis for C/C++: track the use of reflective objects, during pointer analysis, to gain important insights on their structure, which can be used to “patch” the handling of reflective operations on the running analysis, in a mutually recursive fashion. Finally, to address the challenge of analyzing partial Java programs in full generality, we define the problem of “program complementation”: given a partial program we seek to provide definitions for its missing parts so that the “complement” satisfies all static and dynamic typing requirements induced by the code under analysis. Essentially, complementation aims to recover the structure of phantom types. Apart from discovering missing class members (i.e., fields and methods), satisfying the subtyping constraints leads to the formulation of a novel typing problem in the OO context, regarding type hierarchy complementation. We offer algorithms to solve this problem in various inheritance settings, and implement them in JPhantom, a practical tool for Java bytecode complementation

    Diagnosis of Single- or Multiple-Canal Benign Paroxysmal Positional Vertigo according to the Type of Nystagmus

    Get PDF
    Benign paroxysmal positional vertigo (BPPV) is a common peripheral vestibular disorder encountered in primary care and specialist otolaryngology and neurology clinics. It is associated with a characteristic paroxysmal positional nystagmus, which can be elicited with specific diagnostic positional maneuvers, such as the Dix-Hallpike test and the supine roll test. Current clinical research focused on diagnosing and treating various types of BPPV, according to the semicircular canal involved and according to the implicated pathogenetic mechanism. Cases of multiple-canal BPPV have been specifically investigated because until recently these were resistant to treatment with standard canalith repositioning procedures. Probably, the most significant factor in diagnosis of the type of BPPV is observation of the provoked nystagmus, during the diagnostic positional maneuvers. We describe in detail the various types of nystagmus, according to the canals involved, which are the keypoint to accurate diagnosis

    Study of Allergic Rhinitis in Childhood

    Get PDF
    Allergic rhinitis is common among children and quite often represents a stage of the atopic march. Although sensitization to food and airborne allergens may appear in infancy and early childhood, symptoms of the disease are usually present after age 3. The aim of this study was to determine the most frequent food and indoor and outdoor respiratory allergens involved in allergic rhinitis in children in the region of Piraeus. The study was performed in the outpatient clinic of otolaryngologic allergy of a general hospital. Fifty children (ranged 6–14 ) with symptoms of allergic rhinitis and positive radioallergosorbent test (RAST) for IgE antibodies or skin prick tests were included in the study. Thirty six (72%) of the subjects of the study had intermittent allergic rhinitis. The most common aeroallergens determined were grass pollens and Parietaria, whereas egg and milk were the food allergens identified. The detection of indoor and outdoor allergens in the region of Piraeus, based on skin prick tests and RAST tests, showed high incidence of grasses and food allergens, which is similar to other Mediterranean countries

    Primary Lymphangioma of the Tonsil: A Case Report

    Get PDF
    Benign tumors of the tonsils occur infrequently. Lymphangiomas are rare congenital tumors of the lymphatic system, and tonsillar lymphangioma is an extremely rare occurrence. Its pathogenesis is uncertain, but history, clinical examination, and histological examination should establish the diagnosis. We present a 17-year-old white male with lymphangioma of the right tonsil. The tonsils were excised and biopsy confirmed the diagnosis. Tonsillar lymphangioma is a rare clinical entity, which should be known to the otolaryngologist, in order to diagnose and treat it appropriately and avoid confusion with tonsillar malignancies

    Transiently Evoked Otoacoustic Emissions in Children with Otitis Media with Effusion

    Get PDF
    Introduction. Otitis media with effusion is a common pediatric disease whose diagnosis is based on pneumatic otoscopy, pure-tone audiometry, and tympanometry. The aim of this study was to evaluate transiently evoked otoacoustic emissions in the diagnosis of otitis media with effusion as compared to tympanometry. Patients and Methods. 38 children with bilateral otitis media with effusion were studied. 40 normal children of similar age and sex were used as controls. All subjects underwent pneumatic otoscopy, standard pure-tone audiometry, tympanometry, and transiently evoked otoacoustic emissions. Results. In the group of children with bilateral otitis media, transiently evoked otoacoustic emissions were absent in 51 ears (67%). In the remaining 25 ears (33%) the mean emission amplitude was reduced, as compared to the mean value of the control group. Conclusions. Transiently evoked otoacoustic emissions should be included in the diagnostic workup of otitis media with effusion because it is a fast, reliable, and objective test. Transiently evoked otoacoustic emissions should always be used in conjunction with tympanometry, because a more meaningful interpretation of transiently evoked otoacoustic emissions measures is possible

    The effect of MemoVigor 2 on recent-onset idiopathic tinnitus: a randomized double-blind placebo-controlled clinical trial

    Get PDF
    Background: Tinnitus is a common symptom associated with the conscious perception of sound in the absence of a corresponding external or internal sound source, which can severely impact quality of life. Because of the current limited understanding of the precise pathophysiological mechanism of idiopathic tinnitus, no curable treatment has been attained yet. A food supplement trading as MemoVigor 2, which contains a combination of therapeutic ingredients with mainly antioxidant activity, has been used in the treatment of tinnitus. The objective of our study was to evaluate the effectiveness of MemoVigor 2 in the treatment of recent-onset idiopathic tinnitus.Methods: In a prospective single-centre randomized, double-blind, placebo-controlled clinical trial we studied 204 patients with idiopathic tinnitus divided into two groups: 104 patients who received MemoVigor 2 and 100 patients treated with placebo. To evaluate changes in tinnitus we used (1) audiometry/tympanometry; (2) specific measures of tinnitus perception, including tinnitus pitch, loudness at tinnitus pitch, loudness at 1 kHz, minimum masking level, and residual inhibition; (3) questionnaires of tinnitus handicap inventory, mini tinnitus questionnaire and patients’ global impression of change. All patients underwent this test battery at the beginning of the study and in a repeat post-3-month session.Results: All tinnitus measures, including pitch, loudness, minimum masking level and residual inhibition improved significantly in the intervention group. Most of these measures improved in the placebo group too, but in a lesser degree. All questionnaire scores diminished significantly in both groups, but the degree of decrease was greater in the intervention group. The participants’ tinnitus outcome reported after treatment using the patients’ global impression of change score differed significantly between the two groups, with greater improvement observed in the intervention group.Conclusion: We found that the use of MemoVigor 2 improved recent-onset tinnitus, as proved by a set of tests performed for its evaluation, including audiometric measures, specific measures of tinnitus perception and tinnitus questionnaires. Tinnitus in the placebo group improved too, but to a lesser degree.Clinical Trial Registration: isrctn.com, Identifier ISRCTN1602548

    Set-Based Pre-Processing for Points-To Analysis

    No full text
    We present set-based pre-analysis: a virtually universal optimization technique for flow-insensitive points-to analysis. Points-to analysis computes a static abstraction of how object values flow through a program’s variables. Set-based pre-analysis relies on the observation that much of this reasoning can take place at the set level rather than the value level. Computing constraints at the set level results in significant optimization opportunities: we can rewrite the input program into a simplified form with the same essential points-to properties. This rewrite results in removing both local variables and instructions, thus simplifying the subsequent value-based points-to computation. Effectively, set-based pre-analysis puts the program in a normal form optimized for points-to analysis. Compared to other techniques for off-line optimization of points-to analyses in the literature, the new elements of our approach are the ability to eliminate statements, and not just variables, as well as its modularity: set-based pre-analysis can be performed on the input just once, e. g., allowing the pre-optimization of libraries that are subsequently reused many times and for different analyses. In experiments with Java programs, set-based pre-analysis eliminates 30% of the program’s local variables and 30% or more of computed context-sensitive points-to facts, over a wide set of benchmarks and analyses, resulting in a similar to 20% average speedup (max: 110%, median: 18%)

    Class Hierarchy Complementation: Soundly Completing a Partial Type Graph

    No full text
    We present the problem of class hierarchy complementation: given a partially known hierarchy of classes together with subtyping constraints (”A has to be a transitive subtype of B”) complete the hierarchy so that it satisfies all constraints. The problem has immediate practical application to the analysis of partial programs-e.g., it arises in the process of providing a sound handling of “phantom classes” in the Soot program analysis framework. We provide algorithms to solve the hierarchy complementation problem in the single inheritance and multiple inheritance settings. We also show that the problem in a language such as Java, with single inheritance but multiple subtyping and distinguished class vs. interface types, can be decomposed into separate single- and multiple-subtyping instances. We implement our algorithms in a tool, JPhantom, which complements partial Java bytecode programs so that the result is guaranteed to satisfy the Java verifier requirements. JPhantom is highly scalable and runs in mere seconds even for large input applications and complex constraints (with a maximum of 14s for a 19MB binary)
    corecore